package cn.tedu.csmall.cart.webapi.kafka; 
 /*
 @Time: 2023/3/27 19:54
 @Author:GShuai
 @File:Comsumer.class
 @Software:IntelliJ IDEA
*/

import cn.tedu.csmall.commons.pojo.cart.model.CartTb;
import com.google.gson.Gson;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

// 因为Kafka接收消息的功能在SpringBoot配置，所以当前类也必须保存在Spring容器中，才能生效
@Component
public class Consumer {
    // SpringKafka 接受消息依靠的是一个监听机制
    // SpringKafka 提供一个监听线程，关注Kafka的消息往来
    // 如果有消息使用指定的话题名称（myCart）发送到kafka，就回自动掉
    @KafkaListener(topics = "myCart")
    // 下面的方法会在Kafka中出现话题名称为myCart时运行，而且方法的参数就是消息对象
    public void received(ConsumerRecord<String,String> record){
        // 方法参数类型必须时ConsumerRecord
        // ConsumerRecord<[话题的类型],[消息的类型]>
        // record 就是消息本身，下面获得具体的值
        String json = record.value();
        // 将json格式字符串转换为Java对象
        Gson gson = new Gson();
        // 执行转换，还要额外指定转换目标类型的反射
        CartTb cart = gson.fromJson(json,CartTb.class);
        System.out.println("接收到消息:"+cart);
    }
}
